#include<iostream>
using namespace std;
/*
默认情况下，c++编译器至少给一个类添加3个函数
1、默认构造函数（无参，函数体为空）
2、默认析构函数（无参，函数体为空）
3、默认拷贝构造函数，对属性进行值拷贝

构造函数调用规则如下：
    如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造
    如果用户定义拷贝构造函数，c++不会再提供其他构造函数
*/
class Person
{
public:
    Person()
    {
        cout<<"Person的构造函数调用"<<endl;
    }
    Person(int age)
    {
        m_Age=age;
        cout<<"Person的有参构造函数调用"<<endl;
    }
    // Person(const Person &p)
    // {
    //     m_Age=p.m_Age;
    //     cout<<"Person的拷贝构造函数调用"<<endl;
    // }
    ~Person()
    {
        cout<<"Person的析构函数调用"<<endl;
    }
    int m_Age;

};
void test01()
{
    Person p;
    p.m_Age=18;
    Person p2(p);
    cout<<"p2的年龄为："<<p2.m_Age<<endl;
}
void test02()
{
    // Person p;//如果写了有参构造函数，但没有写拷贝构造函数，那么无参构造函数不再提供，这条语句就会报错；
    
}
int main()
{
    test01();
}
